import sys
import os

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

from video_processors.concat_processor import concat_processor


def main():
    """
    concat_processor使用示例
    
    本示例展示了如何使用concat_processor函数处理视频文件。
    支持本地文件路径和网络URL，函数会自动下载网络视频进行处理。
    
    新增功能：
    1. 下载重试机制：对于网络视频，会尝试下载2次，如果都失败则忽略该记录
    2. 指定下载目录：所有网络视频将下载到项目目录下的download文件夹
    3. 自动清理：处理完成后会自动删除本次任务下载的视频文件，但保留download文件夹
    4. 分辨率和帧率适配：支持处理不同分辨率和帧率的视频，可选择保持宽高比
    """
    # 真实的视频链接列表
    real_video_urls = [
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/b2ff5f26-3699-4de3-adc7-730e6f7e5090.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/162fb124-18df-4c25-a56b-b7670d09b9e2.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/e10c5df4-ed3e-4be2-8c7d-17f5d8dd60fe.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/86619e1f-a24b-4983-b70f-754201a49da3.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/e7990842-58dd-4a3f-8ebb-0d007be3a470.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/89021356-ca75-41d4-85ff-8e75a1351f9f.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/45f7e5e6-4702-41c9-a919-3584148f2b15.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/431e3f1d-e30e-4792-8d54-7e4363caa7a7.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/225520c1-dcdf-4536-b5df-3b21e4e8b84c.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/1ba0b693-fa3a-4b87-8507-3745463717c5.mp4",
        "https://bbdev.oss-cn-zhangjiakou.aliyuncs.com/freefishpc/assets_library/6351/124/1eb69825-492c-47b5-bf78-37613181c153.mp4"
    ]
    
    # 示例1: 拼接前3个视频，不进行截取
    print("=== 示例1: 拼接前3个视频 ===")
    try:
        # 使用前3个视频
        video_paths = real_video_urls[:11]
        print(f"将拼接以下视频:")
        for i, url in enumerate(video_paths, 1):
            print(f"  {i}. {url}")
        
        # 现在concat_processor支持直接使用网络链接，会自动下载到本地处理
        print("\n开始拼接视频（支持网络链接）...")
        output_path, video_info = concat_processor(
            video_paths=video_paths,  # 可以直接使用网络链接
            target_duration=None  # 不截取，使用所有视频的总时长
        )
        
        print(f"处理完成!")
        print(f"输出路径: {output_path}")
        print(f"视频时长: {video_info['duration']} 秒")
        print(f"视频尺寸: {video_info['size']}")
        print(f"视频FPS: {video_info['fps']}")
        print(f"文件大小: {video_info['file_size']} 字节")
        
    except Exception as e:
        print(f"处理失败: {e}")
    
    print("\n" + "="*50 + "\n")
    return
    # 示例2: 拼接前2个视频并截取到指定时长
    print("=== 示例2: 拼接前2个视频并截取 ===")
    try:
        # 使用前2个视频
        video_paths = real_video_urls[:2]
        print(f"将拼接以下视频:")
        for i, url in enumerate(video_paths, 1):
            print(f"  {i}. {url}")
        
        # 拼接视频并截取到15秒
        print("\n开始拼接视频并截取到15秒...")
        output_path, video_info = concat_processor(
            video_paths=video_paths,  # 可以直接使用网络链接
            target_duration=15  # 截取到15秒
        )
        
        print(f"处理完成!")
        print(f"输出路径: {output_path}")
        print(f"视频时长: {video_info['duration']} 秒")
        print(f"视频尺寸: {video_info['size']}")
        print(f"视频FPS: {video_info['fps']}")
        print(f"文件大小: {video_info['file_size']} 字节")
        
    except Exception as e:
        print(f"处理失败: {e}")
    
    print("\n" + "="*50 + "\n")
    
    # 示例3: 处理不同分辨率的视频，保持宽高比
    print("=== 示例3: 处理不同分辨率的视频（保持宽高比） ===")
    try:
        # 使用前2个视频
        video_paths = real_video_urls[:2]
        print(f"将拼接以下视频:")
        for i, url in enumerate(video_paths, 1):
            print(f"  {i}. {url}")
        
        # 处理不同分辨率的视频，保持宽高比不变
        print("\n开始处理不同分辨率的视频（保持宽高比）...")
        output_path, video_info = concat_processor(
            video_paths=video_paths,
            target_duration=10,  # 截取到10秒
            maintain_aspect_ratio=True,  # 保持宽高比不变
            target_size=(1280, 720),  # 指定目标尺寸
            target_fps=30.0  # 指定目标帧率
        )
        
        print(f"处理完成!")
        print(f"输出路径: {output_path}")
        print(f"视频时长: {video_info['duration']} 秒")
        print(f"视频尺寸: {video_info['size']}")
        print(f"视频FPS: {video_info['fps']}")
        print(f"文件大小: {video_info['file_size']} 字节")
        
    except Exception as e:
        print(f"处理失败: {e}")
    
    print("\n" + "="*50 + "\n")
    
    # 示例4: 处理不同分辨率的视频，不保持宽高比
    print("=== 示例4: 处理不同分辨率的视频（不保持宽高比） ===")
    try:
        # 使用前2个视频
        video_paths = real_video_urls[:2]
        print(f"将拼接以下视频:")
        for i, url in enumerate(video_paths, 1):
            print(f"  {i}. {url}")
        
        # 处理不同分辨率的视频，不保持宽高比（直接拉伸）
        print("\n开始处理不同分辨率的视频（不保持宽高比）...")
        output_path, video_info = concat_processor(
            video_paths=video_paths,
            target_duration=8,  # 截取到8秒
            maintain_aspect_ratio=False,  # 不保持宽高比
            target_size=(1920, 1080),  # 指定目标尺寸
            target_fps=24.0  # 指定目标帧率
        )
        
        print(f"处理完成!")
        print(f"输出路径: {output_path}")
        print(f"视频时长: {video_info['duration']} 秒")
        print(f"视频尺寸: {video_info['size']}")
        print(f"视频FPS: {video_info['fps']}")
        print(f"文件大小: {video_info['file_size']} 字节")
        
    except Exception as e:
        print(f"处理失败: {e}")


if __name__ == "__main__":
    main()